Перейти к основному содержимому

5.06. Ключевые слова в C++

Разработчику Архитектору

Ключевые слова в C++

Управляющие конструкции

Ключевое словоНазначениеПример
ifУсловное выполнение кода при истинности выраженияif (x > 0) process(x);
elseАльтернативная ветка для if при ложности условияif (ok) success(); else fail();
switchМножественный выбор на основе целочисленного выраженияswitch (code) { case 1: handle(); break; }
caseМетка варианта внутри switchcase HTTP_OK: return true;
defaultМетка варианта по умолчанию в switchdefault: log_error(); break;
breakПрерывание выполнения цикла или switchfor (;;) { if (done) break; }
continueПереход к следующей итерации циклаfor (auto v : items) { if (skip(v)) continue; process(v); }
doНачало цикла с постусловиемdo { read(); } while (!eof);
whileЦикл с предусловием или завершение цикла dowhile (ptr) { ptr = ptr->next; }
forЦикл с инициализацией, условием и шагомfor (int i = 0; i < n; ++i) sum += arr[i];
gotoБезусловный переход к метке в функцииif (err) goto cleanup;

Типы данных

Ключевое словоНазначениеПример
boolЛогический тип со значениями true и falsebool active = true;
charЦелочисленный тип для представления символовchar c = 'A';
char8_tТип для 8-битных UTF-8 символов (C++20)char8_t utf8 = u8'ы';
char16_tТип для 16-битных UTF-16 символов (C++11)char16_t utf16 = u'ы';
char32_tТип для 32-битных UTF-32 символов (C++11)char32_t utf32 = U'ы';
wchar_tРасширенный символьный тип, размер зависит от платформыwchar_t wc = L'Ω';
shortКороткое целое числоshort count = 100;
intЦелое число базового размераint value = 42;
longДлинное целое числоlong id = 123456789L;
long longОчень длинное целое число (C++11)long long big = 9223372036854775807LL;
signedЯвное указание знакового представления целогоsigned char delta = -5;
unsignedБеззнаковое целое числоunsigned int size = 100u;
floatЧисло с плавающей точкой одинарной точностиfloat pi = 3.14159f;
doubleЧисло с плавающей точкой двойной точностиdouble precise = 3.1415926535;
long doubleЧисло с плавающей точкой расширенной точностиlong double extended = 3.141592653589793238L;
voidОтсутствие типа; используется для указателей или функций без возвратаvoid* ptr = malloc(100);
nullptrКонстанта нулевого указателя (C++11)int* p = nullptr;
autoАвтоматический вывод типа переменной (C++11)auto iter = container.begin();
decltypeПолучение типа выражения (C++11)decltype(x + y) result = x + y;

Модификаторы и спецификаторы

Ключевое словоНазначениеПример
constОбъявление неизменяемого объекта или указателяconst int MAX = 100;
constexprВычисление значения во время компиляции (C++11)constexpr int square(int x) { return x * x; }
constevalФункция, обязательная для вычисления во время компиляции (C++20)consteval int id(int x) { return x; }
constinitГарантированная инициализация во время компиляции (C++20)constinit int global = 42;
volatileУказание на возможное изменение объекта извне программыvolatile bool flag;
mutableРазрешение изменения члена класса в константном методеmutable std::mutex mtx;
staticСтатическая длительность хранения или принадлежность к классуstatic int counter = 0;
thread_localХранение отдельной копии переменной для каждого потока (C++11)thread_local int per_thread_id;
externСвязывание объекта или функции с внешней единицей трансляцииextern int global_var;
registerУстаревшее; рекомендация разместить переменную в регистреregister int i; // игнорируется современными компиляторами
alignasУказание выравнивания объекта (C++11)alignas(16) float vec[4];
alignofПолучение требуемого выравнивания типа (C++11)size_t a = alignof(double);
sizeofОпределение размера типа или объекта в байтахsize_t s = sizeof(int);
noexceptСпецификатор отсутствия исключений у функции (C++11)void cleanup() noexcept;
inlineРекомендация встраивания функции или определения в заголовкеinline int add(int a, int b) { return a + b; }

Приведение типов

Ключевое словоНазначениеПример
static_castСтатическое приведение между связанными типамиdouble d = static_cast<double>(i);
dynamic_castБезопасное приведение в иерархии наследования с проверкой во время выполненияDerived* d = dynamic_cast<Derived*>(base_ptr);
const_castДобавление или снятие квалификатора constconst_cast<char*>(str)[0] = 'X';
reinterpret_castНизкоуровневое приведение между несвязанными типамиint* p = reinterpret_cast<int*>(buffer);

Обработка исключений

Ключевое словоНазначениеПример
tryБлок кода, в котором может возникнуть исключениеtry { risky_operation(); }
catchОбработчик исключения после блока trycatch (const std::exception& e) { log(e.what()); }
throwГенерация исключенияthrow std::runtime_error("invalid state");
noexceptСпецификатор отсутствия исключений (повторно для полноты)~MyClass() noexcept;

Объектно-ориентированное программирование

Ключевое словоНазначениеПример
classОбъявление пользовательского типа с инкапсуляциейclass Widget { public: void draw(); };
structОбъявление пользовательского типа с открытыми членами по умолчаниюstruct Point { int x; int y; };
unionТип с общим участком памяти для нескольких полейunion Data { int i; float f; char str[20]; };
enumОбъявление перечислимого типаenum Color { Red, Green, Blue };
publicСпецификатор доступа: открытый интерфейсclass X { public: int value; };
protectedСпецификатор доступа: доступен наследникамclass Base { protected: void helper(); };
privateСпецификатор доступа: закрытый интерфейсclass Secret { private: int key; };
friendПредоставление доступа к закрытым членам внешней сущностиfriend class Debugger;
virtualОбъявление виртуальной функции для полиморфизмаvirtual void render() = 0;
overrideКонтекстное ключевое слово: подтверждение переопределения виртуальной функции (C++11)void render() override;
finalКонтекстное ключевое слово: запрет дальнейшего наследования класса или переопределения функции (C++11)class Leaf final { };
thisУказатель на текущий объект внутри методаreturn this->value;
explicitЗапрет неявных преобразований конструктораexplicit Vector(int size);

Шаблоны и обобщённое программирование

Ключевое словоНазначениеПример
templateОбъявление шаблона класса или функцииtemplate<typename T> T min(T a, T b);
typenameУказание зависимого типа в шаблоне или псевдоним для classtemplate<typename T> class List;
conceptОграничение шаблонных параметров набором требований (C++20)concept Integral = std::is_integral_v<T>;
requiresСпецификация требований к шаблонным параметрам (C++20)template<typename T> requires Integral<T> void f(T x);

Корутины (C++20)

Ключевое словоНазначениеПример
co_awaitПриостановка корутины до завершения асинхронной операцииauto result = co_await fetch_data();
co_yieldВозврат промежуточного значения из корутины-генератораco_yield value;
co_returnЗавершение корутины с возвратом результатаco_return final_value;

Устаревшие и редко используемые ключевые слова

Ключевое словоНазначениеПример
auto (до C++11)Автоматическая длительность хранения (устарело, значение изменено в C++11)auto int x = 5; // устаревший синтаксис
exportЭкспорт шаблонов (не поддерживается большинством компиляторов)export template<typename T> class X;
registerРекомендация размещения переменной в регистре процессораregister int counter;

Зарезервированные идентификаторы для будущего использования

Ключевое словоНазначениеПример
char8_tТип для хранения UTF-8 кодовых единиц (C++20)char8_t utf8_str[] = u8"текст";
conceptОпределение ограничений для шаблонных параметров (C++20)concept Signed = std::is_signed_v<T>;
constevalФункция, вычисляемая исключительно во время компиляции (C++20)consteval int factorial(int n) { return n <= 1 ? 1 : n * factorial(n-1); }
constinitГарантированная инициализация статического объекта во время компиляции (C++20)constinit thread_local int id = generate_id();
co_awaitОжидание завершения асинхронной операции в корутине (C++20)auto data = co_await fetch_async(url);
co_yieldВозврат промежуточного значения из корутины-генератора (C++20)co_yield current_value;
co_returnЗавершение корутины с возвратом результата (C++20)co_return final_result;
requiresСпецификация требований к шаблонным параметрам (C++20)template<typename T> requires std::integral<T> void f(T x);
importИмпорт модуля (C++20)import std.core;
moduleОбъявление модуля (C++20)module my_component;

Специальные литералы

Ключевое словоНазначениеПример
nullptrКонстанта нулевого указателяint* ptr = nullptr;
trueЛогическая константа истиныbool active = true;
falseЛогическая константа лжиbool empty = false;

Прочие ключевые слова

Ключевое словоНазначениеПример
namespaceПространство имён для группировки именnamespace math { double pi = 3.14159; }
usingВведение псевдонима типа или импорт имени из пространства имёнusing IntPtr = int*;
operatorПерегрузка оператора или объявление функции-оператораComplex operator+(const Complex& a, const Complex& b);
newДинамическое выделение памятиint* p = new int[100];
deleteОсвобождение памяти, выделенной через newdelete[] p;
typeidПолучение информации о типе во время выполненияconst type_info& ti = typeid(obj);
trueЛогическая константа истиныbool flag = true;
falseЛогическая константа лжиbool empty = false;
andАльтернативное написание оператора && (из заголовка <iso646.h>)if (ready and valid) proceed();
orАльтернативное написание оператора `
notАльтернативное написание оператора !if (not found) return;
xorАльтернативное написание оператора ^bool diff = (a xor b);
asmВстраивание ассемблерного кода (зависит от компилятора)asm("nop");
exportУстаревшее; использовалось для экспорта шаблонов (не поддерживается)export template<typename T> class X; // игнорируется
importИмпорт модуля (C++20)import std;
moduleОбъявление модуля (C++20)module mylib;